﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using Civilisation_code.PCarte;
using Civilisation_code.PJoueur;
using System.Windows.Media;

namespace Civilisation_code.PPartie
{
    /// <summary>
    /// Classe Monteur_Partie_IMPL héritant de la classe Monteur_Partie
    /// </summary>
    /// <remarks>
    /// MonteurConcret dans le patron de conception Monteur
    /// </remarks>
    public class Monteur_Partie_IMPL : Monteur_Partie
    {
        /// <summary>
        /// Génère les joueurs
        /// </summary>
        /// <param name="info_joueurs">joueurs</param>
        /// <param name="position_joueurs">positions</param>
        override protected void genererJoueurs(Hashtable info_joueurs, List<Case> position_joueurs)
        {
            int i = 0;
            foreach (string nom in info_joueurs.Keys)
            {
                //Création de chaque joueur
                _partie.addJoueur(new Joueur(nom, ((Tuple<string, Color>)info_joueurs[nom]).Item1, ((Tuple<string, Color>)info_joueurs[nom]).Item2,position_joueurs[i],_partie));
                i++;
            }
        }

        /// <summary>
        /// Génère la carte
        /// </summary>
        /// <param name="grande_taille">taille, vrai si 100*100, faux si 25*25</param>
        /// <param name="nb_joueurs">nombre de joueurs</param>
        /// <returns>la carte</returns>
        override protected List<Case> genererCarte(bool grande_taille, int nb_joueurs)
        {
            Algo_Carte algo = null;

            //Choix de l'algo à utiliser en fonction de la taille demandée
            if(grande_taille)
                algo = new Algo_Carte_Normale();
            else
                algo = new Algo_Carte_Petite();

            algo.construire();
            _partie._carte = algo._carte;
            return algo.getPositionsJoueurs(nb_joueurs);
        }
    }
}
